﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace _04_Array类
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("------------创建数组：第一种--------------");
            Array array = Array.CreateInstance(typeof(int), 5);
            array.SetValue(9, 0);
            array.SetValue(10, 1);
            array.SetValue(11, 2);
            array.SetValue(12, 3);
            array.SetValue(13, 4);
            foreach (int item in array)
            {
                Console.WriteLine(item);
            }
            Console.WriteLine("------------第二种--------------");
            int[] array2 = new int[5] { 1, 2, 3, 4, 5 };
            foreach (int item in array2)
            {
                Console.WriteLine(item);
            }


            Console.WriteLine("------------复制数组----------");
            int[] arr_int4 = new int[] { 1, 2, 3, 4, 5, 60 };
            int[] arr_int4_clone = (int[])arr_int4.Clone();
            if (arr_int4==arr_int4_clone)
            {
                Console.WriteLine("arr_int4 和 arr_int4_clone 是相同的");
            }
            else
            {
                Console.WriteLine("arr_int4 和 arr_int4_clone 是不同的");
            }

            int[][] arr_int5 = new int[][] //三层：栈（变量和地址a），堆（地址a有引用地址b）->（地址b指向一个数组）=数组的数组
            {
                new int[]{1,2,3,4,5},
                new int[]{1,2,3}
            };
            int[][] arr_int5_clone = (int[][])arr_int5.Clone();//复制了变量之间指向的数组引用列表a，a中的每个元素指向一个数组
            if (arr_int5[1] == arr_int5_clone[1])//所以这里是相等的
            {
                Console.WriteLine("arr_int5 和 arr_int5_clone 是相同的");
            }
            else
            {
                Console.WriteLine("arr_int5 和 arr_int5_clone 是不同的");
            }
            Console.WriteLine("------------------IComparable---------------");
            Person[] p = new Person[] 
            {
                new Person{Id=1,Name="Li"},
                new Person{Id=2,Name="Zhang"},
                new Person{Id=112,Name="Rang"},
                new Person{Id=12,Name="Hang"}
            };
            Array.Sort(p);
            foreach (Person item in p)
            {
                Console.WriteLine("Id:{0},Name:{1}",item.Id,item.Name);
            }
            Console.WriteLine("------------------ICompare---------------");
            Person[] p2 = new Person[] 
            {
                new Person{Id=1,Name="Li"},
                new Person{Id=2,Name="Zhang"},
                new Person{Id=112,Name="Zang"},
                new Person{Id=12,Name="Hang"}
            };
            PersonCompare pc = new PersonCompare(PersonCompareType.Name);
            Array.Sort(p2, pc);
            foreach (Person item in p2)
            {
                Console.WriteLine("Id:{0},Name:{1}", item.Id, item.Name);
            }
            
            
            Console.ReadKey();

        }
    }
}
